<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title></title>
</head>
<body>
    void 运算符
    void运算符的作用是执行一个表达式，然后不返回任何值，或者说返回undefined。
    
    void 0 // undefined
    void(0) // undefined
    上面是void运算符的两种写法，都正确。建议采用后一种形式，即总是使用圆括号。因为void运算符的优先性很高，如果不使用括号，容易造成错误的结果。比如，void 4 + 7实际上等同于(void 4) + 7。
    
    下面是void运算符的一个例子。
    
    var x = 3;
    void (x = 5) //undefined
    x // 5
    这个运算符的主要用途是浏览器的书签工具（Bookmarklet），以及在超级链接中插入代码防止网页跳转。
    
    请看下面的代码。
    
    <script>
    function f() {
      console.log('Hello World');
    }
    </script>
    <a href="http://example.com" onclick="f(); return false;">点击</a>
    上面代码中，点击链接后，会先执行onclick的代码，由于onclick返回false，所以浏览器不会跳转到 example.com。
    
    void运算符可以取代上面的写法。
    
    <a href="javascript: void(f())">文字</a>
    下面是一个更实际的例子，用户点击链接提交表单，但是不产生页面跳转。
    
    <a href="javascript: void(document.form.submit())">
      提交
    </a>
    逗号运算符
    逗号运算符用于对两个表达式求值，并返回后一个表达式的值。
    
    'a', 'b' // "b"
    
    var x = 0;
    var y = (x++, 10);
    x // 1
    y // 10
    上面代码中，逗号运算符返回后一个表达式的值。
    
    逗号运算符的一个用途是，在返回一个值之前，进行一些辅助操作。
    
    var value = (console.log('Hi!'), true);
    // Hi!
    
    value // true
    上面代码中，先执行逗号之前的操作，然后返回逗号后面的值。
    
    运算顺序
    优先级
    JavaScript 各种运算符的优先级别（Operator Precedence）是不一样的。优先级高的运算符先执行，优先级低的运算符后执行。
    
    4 + 5 * 6 // 34
    上面的代码中，乘法运算符（*）的优先性高于加法运算符（+），所以先执行乘法，再执行加法，相当于下面这样。
    
    4 + (5 * 6) // 34
    如果多个运算符混写在一起，常常会导致令人困惑的代码。
    
    var x = 1;
    var arr = [];
    
    var y = arr.length <= 0 || arr[0] === undefined ? x : arr[0];
    上面代码中，变量y的值就很难看出来，因为这个表达式涉及5个运算符，到底谁的优先级最高，实在不容易记住。
    
    根据语言规格，这五个运算符的优先级从高到低依次为：小于等于（<=)、严格相等（===）、或（||）、三元（?:）、等号（=）。因此上面的表达式，实际的运算顺序如下。
    
    var y = ((arr.length <= 0) || (arr[0] === undefined)) ? x : arr[0];
    记住所有运算符的优先级，是非常难的，也是没有必要的。
</body>
</html>
<script>
这里是逻辑
</script>